﻿// -------------------------------------------------------------------------
//    @FileName         :    NFCacheData.cpp
//    @Author           :    Gao.Yi
//    @Date             :    2025-08-11
//    @Email			:    445267987@qq.com
//    @Module           :    NFCacheData
//    @Desc             :    缓存数据基类实现
//                           提供统一的缓存生命周期管理，包括创建初始化、访问续期、超时判断等功能
//                           支持共享内存的冷启动和热启动场景
//
// -------------------------------------------------------------------------

#include "NFCacheData.h"

#include "NFComm/NFCore/NFServerTime.h"

/**
 * @brief 构造函数，根据共享内存模式调用对应初始化
 * 
 * 根据共享内存管理器的创建模式选择初始化方式：
 * - EN_OBJ_MODE_INIT：冷启动模式，调用 CreateInit() 进行完整初始化
 * - 其他模式：热启动模式，调用 ResumeInit() 进行恢复初始化
 */
NFCacheData::NFCacheData()
{
    if (EN_OBJ_MODE_INIT == NFShmMgr::Instance()->GetCreateMode())
    {
        CreateInit();
    }
    else
    {
        ResumeInit();
    }
}

/**
 * @brief 析构函数
 * 
 * 清理资源，由于使用共享内存管理，通常无需特殊处理
 */
NFCacheData::~NFCacheData()
{
}

/**
 * @brief 冷启动创建初始化
 * 
 * 在共享内存冷启动场景下，对新创建的对象进行初始化：
 * - 设置过期时间为0（表示未设置）
 * - 记录当前创建时间戳，用于后续的创建兜底超时判断
 * 
 * @return 0 表示成功
 */
int NFCacheData::CreateInit()
{
    m_dwCacheExpireTime = 0;
    m_dwCacheCreateTime = NF_ADJUST_TIMENOW();
    return 0;
}

/**
 * @brief 热启动恢复初始化
 * 
 * 在共享内存热启动场景下，从持久化数据恢复对象状态时调用
 * 当前实现为空，如有需要可在此添加恢复逻辑
 * 
 * @return 0 表示成功
 */
int NFCacheData::ResumeInit()
{
    return 0;
}

/**
 * @brief 设置访问续期过期时间
 * 
 * 实现滑动过期机制：每次访问时都将过期时间延长至当前时间 + GetCacheExpireTimeSec()
 * 这确保了频繁访问的对象不会被过早淘汰
 * 
 * @return 0 表示成功
 */
int NFCacheData::SetCacheExpireTime()
{
    m_dwCacheExpireTime = NF_ADJUST_TIMENOW() + GetCacheExpireTimeSec();
    return 0;
}

/**
 * @brief 判断创建兜底是否超时
 * 
 * 检查对象自创建起是否已超过兜底超时时间，用于防止对象长期占用内存：
 * - 即使对象频繁访问续期，创建时间超过兜底时间也会被视为超时
 * - 这是对滑动过期的兜底保护机制
 * 
 * @return true 表示已超时，需要业务侧考虑淘汰；false 表示未超时
 */
bool NFCacheData::IsCacheTimeOut() const
{
    if (m_dwCacheCreateTime + GetCacheCreateTimeoutSec() < NF_ADJUST_TIMENOW())
    {
        return true;
    }
    return false;
}
